Skip to content

feat!: Kill MouseMovementDetector and rename PointerMove* to MouseMove* - #4011

Merged
luanpotter merged 2 commits into
mainfrom
luan.kill-mouse
Aug 16, 2026
Merged

feat!: Kill MouseMovementDetector and rename PointerMove* to MouseMove*#4011
luanpotter merged 2 commits into
mainfrom
luan.kill-mouse

Conversation

@luanpotter

@luanpotter luanpotter commented Aug 16, 2026

Copy link
Copy Markdown
Member

Description

Kill MouseMovementDetector legacy game mixin and associated paraphernalia (such as PointerHoverInfo), in favour of the new system.

Also renames PointerMove* to MouseMove* on the new system, because:

  • Flame's PointerMoveEvent collided with Flutter's class of the same name, which forced a hide on any file importing both package:flame/events.dart and package:flutter/material.dart
  • mouse move is just more accurate: the event wraps Flutter's PointerHoverEvent and is delivered from a MouseRegion. MouseMoveDispatcherKey was already named this way, so the codebase was half-renamed already.

Migration is trivial; use new system instead of old, and apply the renames if needed:

  • PointerMoveEvent -> MouseMoveEvent
  • PointerMoveCallbacks -> MouseMoveCallbacks
  • PointerMoveDispatcher -> MouseMoveDispatcher
  • onPointerMove/onPointerMoveStop -> onMouseMove/onMouseMoveStop

Unlike the legacy detector, which received every mouse movement anywhere on the game surface, MouseMoveCallbacks is routed by position like the other component callbacks (and it can also be mixed at the game level as expected).

The final intermediate shape of gesture_input.md is now reframed around the Callbacks mixins as the true system, with PanDetector demoted to the last remaining legacy detector. I also moved GestureHitboxes to inputs.md, where it belongs as a cross-system concern.

Checklist

  • I have followed the Contributor Guide when preparing my PR.
  • I have updated/added tests for ALL new/updated/fixed functionality.
  • I have updated/added relevant documentation in docs and added dartdoc comments with ///.
  • I have updated/added relevant examples in examples or docs.

Breaking Change?

  • Yes, this PR is a breaking change.
  • No, this PR is not a breaking change.

@luanpotter
luanpotter marked this pull request as ready for review August 16, 2026 16:13
@luanpotter
luanpotter requested a review from spydon August 16, 2026 16:13
@luanpotter
luanpotter enabled auto-merge (squash) August 16, 2026 19:51
@luanpotter
luanpotter merged commit 7fd33de into main Aug 16, 2026
8 checks passed
@luanpotter
luanpotter deleted the luan.kill-mouse branch August 16, 2026 19:59
luanpotter added a commit that referenced this pull request Aug 30, 2026
Kills `PanDetector` which was the last surviving heir of the game-level
detectors. With it dead is all the infra:

* the entire `src/gestures/`, including `events.dart` with `BaseInfo`,
`PositionInfo`, `EventPosition`, `EventDelta` and all `*Info` classes
(`TapDownInfo` and `TapUpInfo` were already dead but not cleansed);
* `GestureDetectorBuilder.initializeGestures`, which existed only to
wire the detectors onto recognizers, along with the
`..initializeGestures(this)` cascade on `Game` (this will allow some
further simplifications on gesture builder binding);
* The `this is PanDetector` early-return in
`FlameGame.containsEventHandlerAt` (it was redundant, as
`componentsAtPoint` yields the game itself last, so a `FlameGame` with a
positional callbacks mixin is still reported as a hit anywhere within
its bounds);
- All the old export blocks in the `events.dart` and `input.dart`
barrels.

Old `PanDetector` users should move to `DragCallbacks` (which as usual
can be mixed into `FlameGame` directly). The examples and tutorials were
migrated separately in #4028.

Also updates and restructure the entire events docs, with this last
mercy kill:
* `gesture_input.md` is deleted (it had become a second index page
duplicating `inputs.md`, plus cross-cutting sections that I re-homed);
* the event coordinate system and the Flutter gesture-API links move to
`inputs.md`, the mouse cursor section to `pointer_events.md`, and
panning-and-zooming folds into `scale_events.md`;
* Fixed two broken links. `collision_detection.md` pointed at
`inputs/gesture_input.md#gesturehitboxes`, but that section had moved to
`inputs.md` in #4011 without its inbound links being updated;
* The drag + scale combination was documented three times, with
`drag_events.md` and `scale_events.md` carrying byte-identical code
blocks. `scale_events.md` is now canonical and `drag_events.md`
cross-links to it;
* Dropped the stale "the old (legacy) approach is described in
gesture_input.md" notes from `tap_events.md` and `pointer_events.md`.
There is no longer an old approach;
* Dropped the "For other input documents, see also:" blocks from
`keyboard_input.md` and `other_inputs.md`. They date from #2063, when
`inputs/` held exactly three documents that each linked the other two;
the gesture third has since become five pages, none of which ever got
the block. No other doc grouping in the tree links back to its index or
lists siblings (navigation is the toctree);
* Documented that `localPosition` / `localDelta` are only valid inside
the callback, with `clone()` as the escape hatch if you need the value
later.

### The Breaking

`PanDetector`, `DragDownInfo`, `DragStartInfo`, `DragUpdateInfo`,
`DragEndInfo`,
`TapDownInfo`, `TapUpInfo`, `PositionInfo`,
`GestureDetectorBuilder.initializeGestures` killed; migration guide
section is included.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants